package com.wander.designStructural.chain;

/**
 * @Author WDYin
 * @Date 2021/11/23
 * @Description 责任链模式：使多个对象都有处理请求的机会，从而避免请求的发起者和接收者之间的耦合，
 *  将这个对象连成一条链，并沿着这条链传递请求，直到有一个对象处理它为止。
 *  需求：
 *      跟领导 A 申请一下涨薪，最满意的结果当时是直接跟上级领导 A 申请就直接过了，但是理想很丰满，
 *      现实很骨干。领导 A 也只是一个小组长并没有直接涨薪的权利，所以领导也要向他的上级 B 进行申请，
 *      而然到这里并没有结束，因为 B 还要跟人资管事的 C 进行申请，人事 C 同事最终还要跟 CEO 进行申请。
 *
 *  思考：
 *      思考一样，我们有上下级，而且每个领导都有上级以及自己能处理的能力范围，所以我们可以按照下面的类图进行设计，
 *      我们可以将申请工单的请求按照职级向上传递，当自己处理不了的时候就反馈给上级，上级完成不了的时候就会传递给他的上级，
 *      直到某个级别能处理为止。
 **/
public class Client {
    public static void main(String[] args) {
        ApplyModel applyModel = new ApplyModel();
        applyModel.setApplyName("阿粉");
        applyModel.setContent("申请涨薪");
        applyModel.setSalary(50);

        //创建责任链
        Leader aLeader = new ALeader();
        Leader bLeader = new BLeader();
        Leader cLeader = new CLeader();
        Leader ceoLeader = new CEOLeader();
        aLeader.setLeader(bLeader);
        bLeader.setLeader(cLeader);
        cLeader.setLeader(ceoLeader);

        aLeader.handlerApply(applyModel);
    }
}
